home *** CD-ROM | disk | FTP | other *** search
/ Professor Multimedia / Professor Multimedia.iso / pmmsetup.mst < prev    next >
Text File  |  1993-12-10  |  19KB  |  716 lines

  1. '**************************************************************************
  2. '*                     Professor MULTIMEDIA Setup Script
  3. '**************************************************************************
  4.  
  5. '' Define DEBUG for script debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'msdetect.inc'
  9.  
  10. ''Dialog ID's
  11. CONST WELCOME      = 100
  12. CONST NODSPACE     = 101
  13. CONST ASKQUIT      = 200
  14. CONST DESTPATH     = 300
  15. CONST EXITFAILURE  = 400
  16. CONST EXITQUIT     = 600
  17. CONST EXITSUCCESS  = 700
  18. CONST WHICHINST    = 800
  19. CONST APPHELP      = 900
  20. CONST WHICHINSTHLP = 910
  21. CONST TESTSOUND    = 1100
  22. CONST INSTALLDRV   = 1200
  23. CONST SOUNDPLAYED  = 1300
  24. CONST WAITDLG       = 1400
  25. CONST EXITREBOOT   = 1500
  26. CONST BBD1           = 5000
  27. CONST BBD6           = 5050
  28. CONST SOUNDSDLG    = 5200
  29. CONST CUSTINST     = 6200
  30. CONST TOOBIG       = 6300
  31. CONST BADPATH      = 6400
  32.  
  33. '' For message boxes
  34. CONST MB_YESNO=4
  35. CONST IDNO=7
  36. CONST IDYES=6
  37.  
  38. ''Bitmap ID
  39. CONST LOGO         = 1
  40.  
  41. ''File Types
  42. CONST BASEFILES     = 1
  43. CONST SOUNDFILES    = 3
  44.  
  45. ''Install directories, etc.
  46. GLOBAL DEST$        ''Default destination directory.
  47. GLOBAL WINDRIVE$    ''Windows drive letter.
  48. GLOBAL CUIDLL$        ''CUI DLL
  49. GLOBAL WINDIR$        ''Windows directory
  50. GLOBAL SYSDIR$        ''System directory
  51. GLOBAL WININI$        ''"win.ini"
  52. GLOBAL SYSINI$        ''GetWindowsDir() + "system.ini"
  53. GLOBAL CDDRV$       ''EUB - CDROM drive root directory
  54.  
  55. ''Install item lists
  56. GLOBAL BASE$        ''List of base files
  57. GLOBAL SOUNDS$      ''List of all sounds.
  58.  
  59. GLOBAL BASEINST$    ''List of base files to install (subset of BASE$)
  60. GLOBAL SOUNDSINST$  ''List of sounds to install (subset of SOUNDS$)
  61.  
  62. ''Custom Install list symbol names
  63. GLOBAL BASENEEDS$   ''Option list costs per drive
  64. GLOBAL SOUNDNEEDS$
  65. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  66.  
  67. ''Custom Install dialog list symbol names
  68. GLOBAL CHECKSTATES$ ''List of check box values
  69. GLOBAL STATUSTEXT$  ''List of values to initialize status items
  70. GLOBAL DRIVETEXT$   ''Drive space info, etc.
  71.  
  72. '' Install DSOUND
  73. GLOBAL INSTDSOUND%
  74.  
  75. '' Customize product
  76. GLOBAL CUSTOMIZE%
  77.  
  78. '' Test sound hardware
  79. GLOBAL DOTEST%
  80.  
  81. GLOBAL PMMFOUND%
  82. GLOBAL CUSTINSTALL%
  83.  
  84. '' Which type of install to perform, by default
  85. GLOBAL DEFINSTOPT$
  86.  
  87. ''Progman titles
  88. GLOBAL PMMAPP$        ''Name of PMM app
  89.  
  90. ''Win.ini [ProfMultiMedia] install code
  91. GLOBAL INSTDIR$
  92.  
  93. ''Space requirements
  94. GLOBAL FITS%        '' > 0 if everything fits
  95.  
  96. DECLARE SUB RecalcOptFiles (ftype%)
  97. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  98. DECLARE FUNCTION GetWindowsVersionCorrectly& ()
  99. DECLARE FUNCTION MakeVer& (x as integer, y as integer)
  100. DECLARE FUNCTION StringInList (s$, y$) AS INTEGER
  101. DECLARE FUNCTION sndPlaySound LIB "MMSYSTEM.DLL" (f$, fl%) AS INTEGER
  102. DECLARE SUB RemoveSectionFiles (dest$, sect$)
  103. DECLARE SUB RemDirectory (d$)
  104. DECLARE FUNCTION HasSoundDriver() AS INTEGER
  105. DECLARE SUB SendProgmanCommand LIB "CUI.DLL" (s$)
  106.  
  107. '' These are defined in wsf.inc (product-specific)
  108. DECLARE SUB SetProductTitles
  109. DECLARE FUNCTION InfFile() AS STRING
  110. DECLARE FUNCTION MakeInstDir(D$) AS STRING
  111. DECLARE SUB AddInfSectionNames (BASE$, SOUNDS$, BASEINST$, SOUNDSINST$)
  112. DECLARE SUB RecalcPath
  113. DECLARE SUB AddOptFilesToCopyList (ftype%)
  114. DECLARE SUB SetDriveStatus
  115. DECLARE SUB AddOptFiles
  116. DECLARE SUB ConfigureApps
  117. DECLARE SUB AddBillboards
  118. DECLARE SUB DoUninstall
  119.  
  120.  
  121. '' This is where it all begins!
  122.  
  123. INIT:
  124.  
  125.     CUIDLL$ = "cui.dll"
  126.     DEFINSTOPT$ = "2"       '' "1" = 1st radiobutton selection, "2"=2nd, "3"=3rd
  127.     INSTDSOUND% = 0
  128.     CUSTOMIZE% = -1
  129.     DOTEST% = -1
  130.     CDDRV$ = GetSymbolValue("STF_SRCDIR")   ''EUB - Intallation drive root directory
  131. '-- CDDRV$ = MID$(CDDRV$,1,2) + "\MAINMENU\"   ''EUB - get the drive string + set dir
  132.  
  133.     SetProductTitles
  134.  
  135.     HELPPROC$ = "FHelpDlgProc"        ''Help dialog procedure
  136.  
  137.     SetBitmap CUIDLL$, LOGO
  138.  
  139.  
  140. '' We don't do Windows 3.0...
  141.  
  142.     If GetWindowsVersionCorrectly() < MakeVer(3, 10) Then
  143.     i% = DoMsgBox("This product requires Windows version 3.10 or greater", PMMAPP$, MB_OK)
  144.     GOTO DONEFINIFIN
  145.     End If
  146.  
  147. ''Find location of INF file and create a default dest. dir
  148.  
  149.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  150.     IF szInf$ = "" THEN
  151.         szInf$ = GetSymbolValue("STF_CWDDIR") + InfFile()
  152.     END IF
  153.  
  154.     '' Load the INF file
  155.     ReadInfFile szInf$
  156.  
  157.     '' Construct default strings
  158.     WINDIR$ = GetWindowsDir()
  159.     SYSDIR$ = GetWindowsSysDir()
  160.     WININI$ = "win.ini"
  161.     SYSINI$ = MakePath(WINDIR$, "system.ini")
  162.  
  163.     '' Construct the default install path
  164.     WINDRIVE$ = MID$(WINDIR$, 1, 1)
  165.     DEST$ = MakeInstDir(WINDRIVE$)
  166. ''----------------------------------------------------------------------
  167. '' We need to install some drivers on the Windows directory, and the TBK
  168. '' files into another drive, if we don't have enough space.  So we better
  169. '' make sure there's enough (NON-COMPRESSED) diskspace available in the
  170. '' Windows directory.  We need about 507 K of diskspace for these drivers,
  171. '' but, let's double this amount, in case the user has DBLSPACE installed
  172. '' in his system.
  173. '' 
  174. CHKDSK:
  175.     free& = GetFreeSpaceForDrive(WINDRIVE$) / 1024
  176. ''i%=DoMsgBox("drive$=" + WINDRIVE$ +" free="+STR$(free&), "Debugging", MB_OK)
  177.  
  178.  
  179.     IF free& < 1024 THEN            ''if free diskspace < 1 megabyte
  180.  
  181.         sz$ = UIStartDlg(CUIDLL$, NODSPACE, "FInfoDlgProc", 0, "")
  182.  
  183.           UIPop 1    
  184.         IF sz$ = "EXIT" THEN
  185.             GOSUB TOOBIG
  186.             END
  187.         ELSEIF sz$ = "CONTINUE" THEN
  188.             GOTO CHKDSK
  189.         END IF
  190.         GOTO CHKDSK
  191.     END IF
  192. ''----------------------------------------------------------------------
  193.     '' Setup install symbols
  194.     BASE$ = "Base Files"
  195.     SOUNDS$ = "Sounds"
  196.     BASEINST$ = "Base Files Inst"
  197.     SOUNDSINST$ = "Sounds Inst"
  198.  
  199.     SetSymbolValue BASE$, ""
  200.     SetSymbolValue SOUNDS$, ""
  201.  
  202.     ''Set up symbols for the initial install dialog
  203.     RADIODEFAULT$ = "Radio Default"
  204.  
  205.     ''Set up symbols for the custom install dialog
  206.     CHECKSTATES$ = "CheckItemsState"
  207.     STATUSTEXT$  = "StatusItemsText"
  208.     DRIVETEXT$   = "DriveStatusText"
  209.     FOR i% = 1 TO 4 STEP 1
  210.         AddListItem CHECKSTATES$, "ON"
  211.     NEXT i%
  212.     FOR i% = 1 TO 4 STEP 1
  213.         AddListItem STATUSTEXT$, ""
  214.     NEXT i%
  215.     FOR i% = 1 TO 7 STEP 1
  216.         AddListItem DRIVETEXT$, ""
  217.     NEXT i%
  218.     ReplaceListItem DRIVETEXT$, 7, DEST$
  219.  
  220.     ''Disk cost list symbols
  221.     BASENEEDS$   = "BaseNeeds"
  222.     SOUNDNEEDS$  = "SoundNeeds"
  223.     EXTRACOSTS$  = "ExtraCosts"
  224.     FOR i% = 1 TO 26 STEP 1
  225.         AddListItem EXTRACOSTS$, "0"
  226.     NEXT i%
  227.  
  228.     '' Locate sounds for install
  229.     INSTSNDDIR$ = MakePath(GetSymbolValue("STF_SRCDIR"), "stup\soundfx")
  230.  
  231.     ''Configure lists of installable files
  232.     AddInfSectionNames BASE$, SOUNDS$, BASEINST$, SOUNDSINST$
  233.  
  234. '$IFDEF DEBUG
  235.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  236. '$ENDIF ''DEBUG
  237.  
  238.  
  239. '' Display Welcome dialog
  240. WELCOME:
  241. ''  res% = sndPlaySound(MakePath(INSTSNDDIR$, "v1.wav"), 3)
  242.  
  243.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", APPHELP, HELPPROC$)
  244.     
  245.     IF sz$ = "EXIT" THEN
  246.         GOSUB ASKQUIT
  247.         GOTO WELCOME
  248.     ELSEIF sz$ = "CONTINUE" THEN
  249.         UIPop 1
  250.         GOTO WHICHINST
  251.     END IF
  252.     GOTO WELCOME
  253.  
  254.  
  255. '' See which install user wants
  256. WHICHINST:
  257.     SetSymbolValue "RadioDefault", DEFINSTOPT$
  258.     sz$ = UIStartDlg(CUIDLL$, WHICHINST, "FRadioDlgProc", WHICHINSTHLP, HELPPROC$)
  259.     
  260.     ''sz$ is the button the user pressed; RADIODEFAULT$ is the option selected
  261.  
  262.     IF sz$ = "EXIT" THEN
  263.         GOSUB ASKQUIT
  264.         GOTO WHICHINST
  265.     ELSEIF sz$ = "CONTINUE" THEN
  266.         sz$ = GetSymbolValue("ButtonChecked")
  267. ''      res% = sndPlaySound(MakePath(INSTSNDDIR$, "v2.wav"), 2)
  268. ''---    IF sz$ = "1" THEN
  269. ''           UIPop 1
  270. ''           CUSTINSTALL% = 0
  271. ''           GOTO CUSTOMIZE
  272. ''---    ELSEIF sz$ = "2" THEN
  273.         IF sz$ = "2" THEN
  274.             UIPop 1
  275. ''---        CUSTINSTALL% = -1
  276.             CUSTINSTALL% = 0
  277.             GOTO CUSTOMIZE
  278.         ELSEIF sz$ = "3" THEN
  279.             DoUninstall
  280.             GOTO WHICHINST
  281.         END IF
  282.     END IF
  283.     GOTO WHICHINST
  284.  
  285.  
  286. '' Customize the copy of the product
  287. CUSTOMIZE:
  288.     IF NOT CUSTOMIZE% THEN
  289.         GOTO SOUNDTEST
  290.     END IF
  291.  
  292.  
  293. '' Test the sound system
  294. SOUNDTEST:
  295.     IF NOT DOTEST% THEN
  296.         GOTO DOINST
  297.     END IF
  298.  
  299.     sz$ = UIStartDlg(CUIDLL$, TESTSOUND, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  300.  
  301.     IF sz$ = "EXIT" THEN
  302.         GOSUB ASKQUIT
  303.         GOTO SOUNDTEST
  304.     ELSEIF sz$ = "CONTINUE" THEN
  305.         UIPop 1
  306.         IF HasSoundDriver() THEN
  307.             GOTO DOINST
  308.         ELSE
  309.             GOTO INSTDSOUND
  310.         END IF
  311.     ELSEIF sz$ = "TEST" THEN
  312.         w$ = MakePath(INSTSNDDIR$, "test123.wav")
  313.         res% = sndPlaySound(w$, 2)
  314.         UIPop 1
  315.         GOTO DIDPLAY
  316.     END IF
  317.     GOTO SOUNDTEST
  318.  
  319.  
  320. '' Did the sound play?
  321. DIDPLAY:
  322.     sz$ = UIStartDlg(CUIDLL$, SOUNDPLAYED, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  323.  
  324.     IF sz$ = "EXIT" THEN
  325.         GOSUB ASKQUIT
  326.         GOTO DIDPLAY
  327.     ELSEIF sz$ = "YES" THEN
  328.         UIPop 1
  329.         GOTO DOINST
  330.     ELSEIF sz$ = "NO" THEN
  331.         UIPop 1
  332.         GOTO INSTDSOUND
  333.     ELSEIF sz$ = "BACK" THEN
  334.         UIPop 1
  335.         GOTO SOUNDTEST
  336.     END IF
  337.     GOTO DIDPLAY
  338.  
  339.  
  340. '' Install DSOUND
  341. INSTDSOUND:
  342.     sz$ = UIStartDlg(CUIDLL$, INSTALLDRV, "FInfoDlgProc", WHICHINSTHLP, HELPPROC$)
  343.  
  344.     IF sz$ = "EXIT" THEN
  345.         GOSUB ASKQUIT
  346.         GOTO INSTDSOUND
  347. ''--ELSEIF sz$ = "INSTALL" THEN
  348. ''      UIPop 1
  349. ''      INSTDSOUND% = -1
  350. ''      GOTO DOINST
  351. ''  ELSEIF sz$ = "CONTINUE" THEN
  352. ''      UIPop 1
  353. ''------GOTO DOINST
  354.     ELSEIF sz$ = "BACK" THEN
  355.         UIPop 1
  356.         GOTO DIDPLAY
  357.     END IF
  358.     GOTO INSTDSOUND
  359.  
  360.  
  361. '' Do the appropriate type of install
  362. DOINST:
  363.     IF CUSTINSTALL% THEN
  364.         GOTO CUSTINST
  365.     END IF
  366.     '' else fall-thru
  367.  
  368. ''Perform a default installation (of all files and options)
  369. DEFINST:
  370.     RecalcPath
  371.     SetDriveStatus
  372.  
  373. GETDEFINSTPATH:
  374.     GOSUB GETPATH
  375.  
  376.     IF sz$ = "CONTINUE" THEN
  377.     ''Install only if it will fit.
  378.         IF FITS% > 0 THEN
  379.             GOSUB TOOBIG
  380.             GOTO GETDEFINSTPATH
  381.         END IF
  382.         UIPop 1
  383.         GOTO INSTALL
  384.     ELSEIF sz$ = "BACK" THEN
  385.         GOTO WHICHINST
  386.     END IF
  387.     GOTO GETDEFINSTPATH
  388.  
  389.  
  390. ''Perform a custom installation (let user choose files, etc)
  391. CUSTINST:
  392.     RecalcPath
  393.     SetDriveStatus
  394.  
  395. ''  res% = sndPlaySound(MakePath(INSTSNDDIR$, "v4.wav"), 3)
  396.  
  397. CUSTINSTDLG:
  398.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  399.  
  400.     IF sz$ = "CONTINUE" THEN
  401.     ''Install only if it will fit.
  402.         IF FITS% > 0 THEN
  403.             GOSUB TOOBIG
  404.             GOTO CUSTINSTDLG
  405.         END IF
  406.         UIPop 1
  407.         GOTO INSTALL
  408.     ELSEIF sz$ = "PATH" THEN
  409. ''        res% = sndPlaySound(MakePath(INSTSNDDIR$, "v5.wav"), 3)
  410.         GOSUB GETPATH
  411.         GOTO CUSTINSTDLG
  412.     ELSEIF sz$ = "CHK1" THEN
  413.         RecalcOptFiles BASEFILES
  414.         SetDriveStatus
  415.         GOTO CUSTINSTDLG
  416.     ELSEIF sz$ = "CHK3" THEN
  417.         RecalcOptFiles SOUNDFILES
  418.         SetDriveStatus
  419.         GOTO CUSTINSTDLG
  420.     ELSEIF sz$ = "BTN3" THEN
  421.         GOTO SOUNDFILES
  422.     ELSEIF sz$ = "EXIT" THEN
  423.         GOSUB ASKQUIT
  424.         GOTO CUSTINST
  425.     END IF
  426.     GOTO CUSTINSTDLG
  427.  
  428.  
  429. INSTALL:
  430.     SetRestartDir DEST$
  431.     ClearCopyList
  432.  
  433.     AddOptFiles
  434.  
  435.     AddBillboards
  436.  
  437.     CreateDir DEST$, cmoNone
  438.  
  439.     UIPopAll
  440.  
  441.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "v6.wav"), 3)
  442.  
  443.     ''Do the copyn'
  444.     SetCopyGaugePosition 10, 135
  445.     CopyFilesInCopyList
  446.  
  447.     ''Back up SYSTEM.INI and WIN.INI
  448.     CopyFile MakePath(WINDIR$, WININI$), MakePath(WINDIR$, "WIN.BAK"), cmoOverwrite, 0
  449.     CopyFile SYSINI$, MakePath(WINDIR$, "SYSTEM.BAK"), cmoOverwrite, 0
  450.  
  451.     '' Configure the installed applications
  452.     ConfigureApps
  453.  
  454.     ''See if we need to restart Windows to finish installing system files which may be in use
  455.     IF RestartListEmpty() = 0 THEN
  456.     i% = DoMsgBox("Certain system files that Setup needs to install are currently in use." + "  Please close all other applications and press OK.  Setup will exit Windows, install these files, and restart Windows.", PMMAPP$ + " Setup", MB_OK)
  457.     i% = ExitExecRestart()
  458.     END IF
  459.  
  460. QUIT:
  461.     ON ERROR GOTO ERRQUIT
  462.  
  463.     IF ERR = 0 THEN
  464.         res% = sndPlaySound(MakePath(INSTSNDDIR$, "v7.wav"), 3)
  465.         dlg% = EXITREBOOT
  466.     ELSEIF ERR = STFQUIT THEN
  467.         res% = sndPlaySound(MakePath(INSTSNDDIR$, "v8.wav"), 3)
  468.         dlg% = EXITQUIT
  469.     ELSE
  470.  
  471. '$IFNDEF DEBUG
  472.     RESUME NEXT
  473. '$ELSE
  474.     dlg% = EXITFAILURE
  475. '$ENDIF
  476.  
  477.     END IF
  478.  
  479. QUITL1:
  480.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  481. ''  res% = sndPlaySound(MakePath(INSTSNDDIR$, "v9.wav"), 2)
  482. ''  IF sz$ = "REACTIVATE" THEN
  483. ''      GOTO QUITL1
  484. ''  END IF
  485.     UIPop 1
  486.  
  487. DONEFINIFIN:
  488.     END
  489.  
  490. ERRQUIT:
  491.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "v10.wav"), 3)
  492.     i% = DoMsgBox("Setup sources were corrupted, call Individual Software Customer Service at (800) 331-3313!", "Setup Error", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  493.     END
  494.  
  495.  
  496.  
  497. GETPATH:
  498.     SetSymbolValue "EditTextIn", DEST$
  499.     SetSymbolValue "EditFocus", "END"
  500. GETPATHL1:
  501.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  502.  
  503.     IF sz$ = "CONTINUE" THEN
  504.         olddest$ = DEST$
  505.         DEST$ = GetSymbolValue("EditTextOut")
  506.         ''Validate new path.
  507.         IF IsDirWritable(DEST$) = 0 THEN
  508.             GOSUB BADPATH
  509.             GOTO GETPATHL1
  510.         END IF
  511. ''      res% = sndPlaySound(MakePath(INSTSNDDIR$, "v11.wav"), 3)
  512.         UIPop 1
  513.  
  514.         ''Truncate display if too long.
  515.         IF LEN(DEST$) > 23 THEN
  516.             ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  517.         ELSE
  518.             ReplaceListItem DRIVETEXT$, 7, DEST$
  519.         END IF
  520.  
  521.         ''Recalc if path changed.
  522.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  523.             RecalcPath
  524.             SetDriveStatus
  525.         END IF
  526.  
  527.         olddest$ = ""
  528.         RETURN
  529.     ELSEIF sz$ = "EXIT" THEN
  530.         GOSUB ASKQUIT
  531.         GOTO GETPATHL1
  532.     ELSEIF sz$ = "BACK" THEN
  533.         UIPop 1
  534.         RETURN
  535.     END IF
  536.     GOTO GETPATHL1
  537.  
  538.  
  539. SOUNDFILES:
  540.     SetSymbolValue "ListItemsIn", GetSymbolValue(SOUNDS$)
  541.     SetSymbolValue "ListItemsOut", GetSymbolValue(SOUNDSINST$)
  542. SOUNDF:
  543.     sz$ = UIStartDlg(CUIDLL$, SOUNDSDLG, "FMultiDlgProc", APPHELP, HELPPROC$)
  544.  
  545.     IF sz$ = "CONTINUE" THEN
  546.         UIPop 1
  547.         SetSymbolValue SOUNDSINST$, GetSymbolValue("ListItemsOut")
  548.         RecalcOptFiles SOUNDFILES
  549.         SetDriveStatus
  550.         GOTO CUSTINSTDLG
  551.     ELSEIF sz$ = "EXIT" THEN
  552.         GOSUB ASKQUIT
  553.         GOTO SOUNDF
  554.     ELSE '' Back...
  555.         UIPop 1
  556.         GOTO CUSTINSTDLG
  557.     END IF
  558.     GOTO SOUNDF
  559.  
  560. TOOBIG:
  561.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  562.     UIPop 1
  563.     RETURN
  564.  
  565.  
  566.  
  567. BADPATH:
  568.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  569.     UIPop 1
  570.     RETURN
  571.  
  572.  
  573. ASKQUIT:
  574.     res% = sndPlaySound(MakePath(INSTSNDDIR$, "v12.wav"), 3)
  575.  
  576.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  577.  
  578.     IF sz$ = "EXIT" THEN
  579.         UIPopAll
  580.         ERROR STFQUIT
  581. ''- ELSEIF sz$ = "REACTIVATE" THEN
  582. ''-----    GOTO ASKQUIT
  583.     ELSE
  584.         UIPop 1
  585.     END IF
  586.     RETURN
  587.  
  588.  
  589. ''Recalculate space based on install options...
  590. SUB RecalcOptFiles (ftype%) STATIC
  591.  
  592.     CursorSave% = ShowWaitCursor()
  593.  
  594.     sz$ = UIStartDlg(CUIDLL$, WAITDLG, "FModelessDlgProc", APPHELP, HELPPROC$)
  595.  
  596.     ClearCopyList
  597.  
  598.     AddOptFilesToCopyList ftype%
  599.  
  600.     fExtra% = 0
  601.     IF ftype% = BASEFILES THEN
  602.         ListSym$ = BASENEEDS$
  603.     IF GetListItem(CHECKSTATES$, BASEFILES) = "ON" THEN
  604.         ''Add extra cost to Windows drive for ini/progman/pointers
  605.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  606.         ReplaceListItem EXTRACOSTS$, ndrive%, "2097152"
  607.         fExtra% = 1
  608.     END IF
  609.     ELSEIF ftype% = SOUNDFILES THEN
  610.         ListSym$ = SOUNDNEEDS$
  611.     END IF
  612.  
  613.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  614.  
  615.     cost& = 0
  616.     FOR i% = 1 TO 26 STEP 1
  617.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  618.     NEXT i%
  619.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  620.  
  621.     IF fExtra% THEN
  622.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  623.     END IF
  624.  
  625.     UIPop 1
  626.  
  627.     RestoreCursor CursorSave%
  628.  
  629.     ListSym$ = ""
  630. END SUB
  631.  
  632.  
  633. ''Make path from dir and szFile; add \  as needed
  634. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  635.     IF szDir$ = "" THEN
  636.         MakePath = szFile$
  637.     ELSEIF szFile$ = "" THEN
  638.         MakePath = szDir$
  639.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  640.         MakePath = szDir$ + szFile$
  641.     ELSE
  642.         MakePath = szDir$ + "\" + szFile$
  643.     END IF
  644. END FUNCTION
  645.  
  646.  
  647. '' Return true if the given string is in the symbol's list
  648. FUNCTION StringInList (s$, y$) STATIC AS INTEGER
  649.     l% = GetListLength(y$)
  650.     FOR i% = 1 TO l
  651.     IF s$ = GetListItem(y$, i%) THEN
  652.         StringInList = -1
  653.         GOTO DONE
  654.     END IF
  655.     NEXT i%
  656.     StringInList = 0
  657. DONE:
  658. END FUNCTION
  659.  
  660.  
  661. ''Get Windows version
  662. FUNCTION GetWindowsVersionCorrectly& () STATIC
  663.     GetWindowsVersionCorrectly = GetWindowsMajorVersion() * 256 + GetWindowsMinorVersion()
  664. END FUNCTION
  665.  
  666.  
  667. '' Turn x, y into a major.minor version long
  668. FUNCTION MakeVer& (x as integer, y as integer) STATIC
  669.     MakeVer = x * 256 + y
  670. END FUNCTION
  671.  
  672.  
  673. '' Remove all files in the given .INF section
  674. SUB RemoveSectionFiles (dest$, sect$) STATIC
  675.     foo$ = "foo"
  676.     MakeListFromSectionFilename foo$, sect$
  677.     l% = GetListLength(foo$)
  678.     FOR i% = 1 TO l% STEP 1
  679.         RemoveFile MakePath(dest$, GetListItem(foo$, i%)), cmoForce
  680.     NEXT i%
  681.     foo$ = ""
  682. END SUB
  683.  
  684.  
  685. '' Remove directory and all files in it, if it exists
  686. SUB RemDirectory(d$) STATIC
  687.     IF Exists(MakePath(d$, "NUL")) THEN
  688.         Kill MakePath(d$, "*.*")
  689.         RmDir d$
  690.     END IF
  691. END SUB
  692.  
  693.  
  694. '' Return True (-1) if the user has a sound driver in the [drivers]
  695. ''  section of win.ini.
  696. FUNCTION HasSoundDriver() STATIC AS INTEGER
  697.     r% = 0
  698.     IF GetIniKeyString(SYSINI$, "drivers", "wave") <> "" THEN
  699.         r% = -1
  700.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave1") <> "" THEN
  701.         r% = -1
  702.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave2") <> "" THEN
  703.         r% = -1
  704.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave3") <> "" THEN
  705.         r% = -1
  706.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave4") <> "" THEN
  707.         r% = -1
  708.     ELSEIF GetIniKeyString(SYSINI$, "drivers", "wave5") <> "" THEN
  709.         r% = -1
  710.     END IF
  711.     HasSoundDriver = r%
  712. END FUNCTION
  713.  
  714. '' Include product-specific function definitions
  715. '$INCLUDE 'specific.inc'
  716.